package com.example.everying.utils;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

import java.util.HashMap;
import java.util.Map;

import static com.aliyun.teautil.Common.assertAsString;

/**
 * 阿里云短信服务工具类
 */
public class SmsUtil {
    public static Client createClient() throws Exception {
        Config config = new Config()
                // 配置 AccessKey ID，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId("LTAI5t8SaRP7na1rPDp2HRjp")
                // 配置 AccessKey Secret，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret("5pWa2XgR69iPAFTTknSFfVjD4XqQ13");

        // 配置 Endpoint
        config.endpoint = "dysmsapi.aliyuncs.com";

        return new Client(config);
    }

    /**
     * 发送验证码短信
     * @param phone
     * @param code
     * @return
     */
    public static Map<String, Object> sendMsg(String phone, String code) {
        // 所以构造Map类型的返回
        HashMap<String, Object> sendSmsResponseMap = new HashMap<>();
        try {
            // 初始化请求客户端
            Client client = SmsUtil.createClient();

            // 构造请求对象，请填入请求参数值
            SendSmsRequest sendSmsRequest = new SendSmsRequest()
                    .setPhoneNumbers(phone)
                    .setSignName("河北雄安拓扬科技")
                    .setTemplateCode("SMS_480195388")
                    .setTemplateParam("{\"code\":" + code + "}");

            // 获取响应对象,响应包含服务端响应的 body 和 headers
            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions());

            // 获取响应体状态码和Body状态码
            Integer statusCode = sendSmsResponse.getStatusCode();
            String responseCode = sendSmsResponse.getBody().getCode();

            // 由于framework模块没有导入阿里云短信服务坐标-无法导入SendSmsResponse
            sendSmsResponseMap.put("statusCode", statusCode);
            sendSmsResponseMap.put("bodyCode", responseCode);
        } catch (TeaException error) {
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println("诊断地址" + error.getData().get("Recommend"));
            assertAsString(error.message);
        }
        return sendSmsResponseMap;
    }
}